#ifndef MAQUINAVIRTUAL_H_
#define MAQUINAVIRTUAL_H_
#define MAX_TAB_PAGINA 2097152
#define TRUE 1
#define FALSE 0

int modoDebug; //Variável global para controlar se o programa está em modo debug

/*
 * Estrutura de uma página.
 * Variável tempo só é utilizada no método LRU
 */
typedef struct {
	unsigned numPagina;
	unsigned tempo;
	int dirtyBit;
} Pagina;

/*
 * Procedimento para inicializar o simulador da máquina virtual. Inicia estrutura que guardarão os dados e chama
 * o método de reposição de página de acordo com os parâmetros
 * Parâmetro 1: Nome do método (lru, fifo, random) - (char *)
 * Parâmetro 2: Nome do arquivo de entrada contendo as instruções de memória (char *)
 * Parâmetro 3: Tamanho da pagina (unsigned int)
 * Parâmetro 4: Tamanho da memória física (unsigned int)
 */
void inicializaMaquinaVitual(char *metodo, char* entrada, unsigned pagina, unsigned memoria);

/*
 * Inicializa a estrutura Pagina
 * Parâmetro 1: Estrutura pagina (Pagina *)
 * Parâmetro 2: Número de páginas (tamanho da memória física / tamanho da pagina) - (int)
 */
void inicializaPagina(Pagina *pagina, int numeroDePaginas);

/*
 * Função para verificar o número da pagina, de acordo com o endereço e o tamanho da página, na instrução de memória
 * Parâmetro 1: Endereço (unsigned)
 * Parâmetro 2: Tamanho da página
 * Retorno: Endereço para localizar na tabela de pagina (unsigned)
 */
unsigned numeroPagina(unsigned addr, unsigned pageSize);

#endif /* MAQUINAVIRTUAL_H_ */
